|
Menüeintrag |
---|
Sketch → Skizzen-Beschränkungen → Lichtbrechung (nach Snellius-Gesetz) festlegen |
Arbeitsbereich |
Sketcher |
Standardtastenkürzel |
K W |
Eingeführt in Version |
0.15 |
Siehe auch |
Keiner |
Das Werkzeug Sketcher ConstrainSnellsLaw Legt zwei Linien so fest, dass sie der Lichtbrechung entsprechen, die beim Passieren einer Grenzfläche auftritt, an der zwei Werkstoffe mit unterschiedlichen Brechungsindizes aufeinander treffen. Siehe Snelliussches_Brechungsgesetz.
Snelliussches Gesetz
Die Reihenfolge der Klicks wird durch gelbe Pfeile mit Zahlen angezeigt. n1, n2 zeigen, wo sich die Brechungsindizes befinden.
Die Randbedingungen können in Makros und von der Python-Konsole aus mit dem folgenden Befehl erstellt werden:
Sketch.addConstraint(Sketcher.Constraint('SnellsLaw',line1,pointpos1,line2,pointpos2,interface,n2byn1))
wobei
Sketch
ein Skizzenobjekt ist.line1
und pointpos1
zwei ganze Zahlen sind, die den Endpunkt der Linie im Medium mit dem Brechungsindex von n1 identifizieren. line1
ist der Index der Linie in der Skizze (der Rückgabewert von Sketch.addGeometry), und pointpos1
sollte 1 für den Startpunkt und 2 für den Endpunkt sein.line2
und pointpos2
die Indizes sind, die den Endpunkt der zweiten Linie angeben (in Medium n2)interface
der Index der Linie ist, die die Position der Grenzfläche zwischen Medium n1 und Medium n2 darstellt.n2byn1
eine Gleitkommazahl ist, die dem Verhältnis der Brechungsindizes n2/n1 entspricht.Die Seite Sketcher Skripterstellung erklärt die Werte, die für line1
, pointpos1
, line2
, pointpos2
und interface
verwendet werden können und enthält weitere Beispiele, wie man Randbedingungen mit Python-Skripten erstellt.
Beispiel:
import Sketcher
import Part
import FreeCAD
StartPoint = 1
EndPoint = 2
f = App.activeDocument().addObject("Sketcher::SketchObject","Sketch")
# add geometry to the sketch
icir = f.addGeometry(Part.Circle(App.Vector(-547.612366,227.479736,0),App.Vector(0,0,1),68.161979))
iline1 = f.addGeometry(Part.LineSegment(App.Vector(-667.331726,244.127090,0),App.Vector(-604.284241,269.275238,0)))
iline2 = f.addGeometry(Part.LineSegment(App.Vector(-604.284241,269.275238,0),App.Vector(-490.940491,256.878265,0)))
# add constraints
# helper constraints:
f.addConstraint(Sketcher.Constraint('Coincident',iline1,EndPoint,iline2,StartPoint))
f.addConstraint(Sketcher.Constraint('PointOnObject',iline1,EndPoint,icir))
# the Snell's law:
f.addConstraint(Sketcher.Constraint('SnellsLaw',iline1,EndPoint,iline2,StartPoint,icir,1.47))
App.ActiveDocument.recompute()
(FIXME)